#include<iostream>
#include<forward_list>
#include<unordered_map>
using namespace std;
const int N =100010;
forward_list<int>h[N];
unordered_map<int,int>de;
//以入度为0的点开始突破，如果所有点都加入过队列表示该图有向无环
//出队的顺序就是一种拓扑序
int q[N],tt=0,hh=0;
int n,m;
void add(int a,int b){
    h[a].push_front(b);
    de[b]++;
}
bool top_sort(){
    for(int i=1;i<=n;i++){
        if(de[i]==0){
            q[tt++]=i;
        }
    }
    while(hh!=tt){
        int cur=q[hh++];
        for(auto e:h[cur]){
            de[e]--;
            if(de[e]==0){
                q[tt++]=e;
            }
        }
    }
    return tt==n;
}

int main(){
    cin>>n>>m;
    while(m--){
        int a,b;
        cin>>a>>b;
        add(a,b);
    }
    if(top_sort()){
        for(int i=0;i<n;i++)
            cout<<q[i]<<' ';
    }
    else cout<<"-1";
    return 0;
}

// 链接：https://www.acwing.com/activity/content/code/content/8273481/
// 来源：AcWing

//STL queue
#include<iostream>
#include<queue>
#include<unordered_map>
#include<forward_list>
using namespace std;
const int N=100010;
int n,m;
forward_list<int>h[N];
int d[N],res[N],ri;
void add(int a,int b){
    h[a].push_front(b);
    d[b]++;
}
bool top_sort(){
    queue<int>q;
    for(int i=1;i<=n;i++){
        if(d[i]==0)
            q.push(i);
    }
    while(!q.empty()){
        int t=q.front();
        q.pop();
        //保存入队列的顺序
        res[ri++]=t;
        for(auto e:h[t]){
            if(--d[e]==0){
                q.push(e);
            }
        }
    }
    //判断是否所有元素都出过队列
    return ri==n;
}


int main(){
    cin>>n>>m;
    while(m--){
        int a,b;
        cin>>a>>b;
        add(a,b);
    }
    if(top_sort()){
        for(int i=0;i<ri;i++){
            cout<<res[i]<<' ';
        }
    }
    else{
        cout<<"-1";
    }
    return 0;
 }